package com.wanghua.spring.filter.watermark;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/*
* 图像水印 Filter。
* 此 Filter 工作原理与 GZIP 压缩类似，先把图像缓存起来，然后对图像数据进行水印处理后输出到客户端浏览器。
* 图像水印 Filter 只能配置给 JPEG 格式的图片（ImageUtil 只能处理 JPEG 格式的图像），并且要配置用做水印图片的文件位置。
* 使用该  Filter 的好处是水印是在浏览图片时动态打上的，不会修改破坏原始图片。
* */
public class WaterMarkFilter implements Filter {
	// 水印图片，配置在初始化参数中
	private String waterMarkFile;

	public void init(FilterConfig config) throws ServletException {
		String file = config.getInitParameter("waterMarkFile");
		waterMarkFile = config.getServletContext().getRealPath(file);
	}

	public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest) req;
		HttpServletResponse response = (HttpServletResponse) res;

		WaterMarkResponseWrapper waterMarkRes = new WaterMarkResponseWrapper(response, waterMarkFile); // 自定义的response
		chain.doFilter(request, waterMarkRes);

		// 打水印，输出到客户端浏览器
		waterMarkRes.finishResponse();
	}

	public void destroy() {
	}
}
